package ar.com.organizador.favoritos.model;

import java.util.List;

public abstract class Favorito {
	
	protected String id;
	protected String descripcion;
	protected Favorito padre;
	protected List<Favorito> hijos; 

	public abstract void agregar(Favorito fav);

	public void remover(){
		padre.removerHijo(this);
	}
	
	public void removerHijo(Favorito hijo){
		if (!hijos.contains(hijo)){
			throw new RuntimeException("No se puede remover el favorito " + hijo.getDescripcion() +  
									   " ya que el mismo no existe");
		}
		hijos.remove(hijo);
	}
	
	public void mover(MoverEnDireccion dir){
		padre.moverHijo(this, dir);
	}

	public void moverHijo(Favorito hijo, MoverEnDireccion dir) {
		if (!hijos.contains(hijo)){
			throw new RuntimeException("No se puede mover el favorito " + hijo.getDescripcion() +  
									   " ya que el mismo no existe");
		}
		dir.mover(hijos, hijo);
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getDescripcion() {
		return descripcion;
	}

	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}

	public Favorito getPadre() {
		return padre;
	}

	public void setPadre(Favorito padre) {
		this.padre = padre;
	}

	public List<Favorito> getHijos() {
		return hijos;
	}

	public void setHijos(List<Favorito> hijos) {
		this.hijos = hijos;
	}
	
}
